﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Dominio
{
    public class CommandCarpeta:ICommand
    {
        public enum Metodos { AgregarObjetoBuzon, EliminarObjetoBuzon };

        private Carpeta carpeta;

        internal Carpeta Carpeta
        {
            get { return carpeta; }
            set { carpeta = value; }
        }

        private List<Object> parametros;

        internal List<Object> Parametros
        {
            get { return parametros; }
            set { parametros = value; }
        }

        private Metodos metodo;

        internal Metodos Metodo
        {
            get { return metodo; }
            set { metodo = value; }
        }

        //En parametros irian los parametros respectivos para el metodo ingresado como parametro
        //Si parametros no corresponden con el metodo tirara un Exception
        /// <summary>
        /// Metodo.AgregarObjetoBuzon:
        /// Parametro 1 = Carpeta carpetaHija
        /// 
        /// Metodo.EliminarObjetoBuzon:
        /// Parametro 1 = Carpeta carpetaHija
        /// </summary>
        public CommandCarpeta(Carpeta carpetaPadre, List<Object> parametros, Metodos metodo)
        {
            Parametros = parametros;
            Metodo = metodo;
            Carpeta = carpetaPadre;
        }

        public void Execute()
        {
            switch (Metodo)
            {
                case Metodos.AgregarObjetoBuzon:
                    Carpeta.AgregarObjetoBuzon((ObjetoBuzon)Parametros.ElementAt(0));
                    break;

                case Metodos.EliminarObjetoBuzon:
                    Carpeta.EliminarObjetoBuzon((ObjetoBuzon)Parametros.ElementAt(0));
                    break;
            }
        }

        public void UnExecute()
        {
            switch (Metodo)
            {
                case Metodos.AgregarObjetoBuzon:
                    Carpeta.EliminarObjetoBuzon((ObjetoBuzon)Parametros.ElementAt(0));
                    break;

                case Metodos.EliminarObjetoBuzon:
                    Carpeta.AgregarObjetoBuzon((ObjetoBuzon)Parametros.ElementAt(0));
                    break;
            }
        }

    }
}
